"""
setup：所有用例执行前，先执行它
teardown：所有用例执行完，最后执行它
"""
# 模块级别和函数级别
import pytest

"""
def setup_module():
    print("这是模块级的setup方法")
def teardown_module():
    print("这是模块级的teardown方法")

def setup_function():
    print("这是函数级的setup方法")
def teardown_function():
    print("这是函数级的teardown方法")

def test_demo1():
    print("这是demo1")
def test_demo2():
    print("这是demo2")
# pytest D:\\Users\\Administrator\\PycharmProjects\\qc1-python-fundamentals\\pytest测试框架\\03-setup与teardown.py::test_demo2
"""
"""
模块级和函数级的setup和teardown方法区别：
模块级：不管有多少条测试用例，都会在所有用例开始执行前，先执行一遍setup方法，等全部执行完，最后执行一遍teardown方法
函数级：每一条用例都会在开始执行前走一遍setup，结束后走一遍teardown方法
"""
# 类级别和方法级别
class TestDemo:
    # 类级别的方法
    # def setup_class(self):
    #     print("这是类级别的setup方法")
    # def teardown_class(self):
    #     print("这是类级别的teardown方法")

    # 方法级别的方法
    """
    pytest.finxture叫做夹具
    scope：这个是自动找到function级别的测试用例
    autouse：自动寻找开关，默认是False
    一旦开启为True，所有的测试用例都会先执行一遍夹具函数
    """
   # @pytest.fixture(scope='class',autouse=True)
   #  def setup_teardown(self):
   #      print("这是类级别的setup")
   #      yield  # 生成器，相当于是一个return
   #      print("这是类级别的teardown")  # 当函数再次调用的时候，会执行这里的代码块

    def setup_method(self):
        print("这是方法级别的setup方法")
    def teardown_method(self):
        print("这是方法级别的teardown方法")

    # 测试方法/测试用例
    def test_demo1(self):
        print("这是demo1")
    def test_demo2(self):
        print("这是demo2")
    def test_demo3(self):
        print("这是demo3")




